package com.neuedu.corejava.ch12;

import java.io.File;

/**
 * 20190812 编写一个程序，能够在指定目录下查找文件或目录
 * 
 * @author admin
 *
 */
public class FileFinder {
	/**
	 * 编写一个方法，查询指定目录下的文件，找到后返回文件的全路径(绝对路径)
	 * 
	 * @param basePath
	 * @param fileName
	 * @return
	 */

	public String find(String basePath, String fileName) {
		if (basePath == null || fileName == null) {// 没传参数或参数为null,不执行查询
			return null;
		}
		File base = new File(basePath);

		File[] files = base.listFiles();// 列出参考目录下的所有文件或目录
		if (files != null) {
			for (File file : files) {
				if (file.isFile()) {
					String fn = file.getName();
					if (fileName.equals(fn)) {// 找到匹配的文件
						return file.getAbsolutePath();// 返回文件的全路径
					}
				} else {
					System.out.println("不是文件" + file.getAbsolutePath());
					String f = find(file.getAbsolutePath(), fileName);// 递归调用
					if (f != null) {// 递归中断条件
						return f;
					}
				}
			}
			
		}
		return null;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String path = "D:\\东软培训\\javaworkspace\\corejava";
		String file = "Student.java";

		long start = System.currentTimeMillis();
		System.out.println("正在搜索文件。。。。。");
		// FileFinder fileFinder=new FileFinder();

		// 匿名对象
		// String result =new FileFinder().find(path, file);
		String result = null;
		if (result != null) {
			System.out.println("找到一个文件" + result);
		} else {
			System.out.println("找不到文件");
		}
		long stop = System.currentTimeMillis();
		System.out.println("执行时长（秒）：" + (stop - start) / 1000);

		// 查询出系统的所有盘符，进行全盘搜索
		start = System.currentTimeMillis();
		System.out.println("正在全盘搜索文件。。。。。。");
		File[] roots = File.listRoots();// 查询系统所有跟目录
		for (File file2 : roots) {
			System.out.println(file2.getAbsolutePath());
			result = new FileFinder().find(file2.getAbsolutePath(), "abc.txt");
		}
		stop = System.currentTimeMillis();
		System.out.println("执行时长（秒）：" + (stop - start) / 1000);

	}

}
